<!DOCTYPE HTML>
<html>
<head><meta name="generator" content="Hexo 3.9.0">
  <meta charset="utf-8">
  
  <title>Sprin之XML解析 › 但行好事，莫问前程</title>
  <meta name="author" content="fengbo">
  
  <meta name="description" content="不想当架构师的程序员不是好厨师 ，不认为PHP是世界上最好的编程语言的Python开发者不是一个好的Javaer。">
  
  
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">

  <meta property="og:title" content="Sprin之XML解析">
  <meta property="og:site_name" content="但行好事，莫问前程">

  
    <meta property="og:image" content="undefined">
  

  <link href="/favicon.png" rel="icon">
  <link rel="alternate" href="/atom.xml" title="但行好事，莫问前程" type="application/atom+xml">
  <link rel="stylesheet" href="/css/style.css" media="screen" type="text/css">
  <!--[if lt IE 9]><script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
  

</head>
</html>

<body>
  <header id="header"><div class="meta inner">
  <h1><a href="/">但行好事，莫问前程</a></h1>
  <h2><a href="/">CV工程师，了解面向Google编程的基本原理，有三年使用Google经验，在通往程序员的道路上艰难的爬行着。</a></h2>
  <nav id="main-nav">
    <ul>
      
      <li><a href="/">Home</a></li>
      
      <li><a href="/archives">Archives</a></li>
      
      <li><a href="/atom.xml">RSS</a></li>
      
    </ul>
    <div class="clearfix"></div>
  </nav>
</div>
<div class="clearfix"></div>
</header>
  <div id="content" class="inner">
    <div id="main-col" class="alignleft"><div id="wrapper"><article class="post">
  <div class="post-content">
    <header>
      
  
    <h1 class="title">Sprin之XML解析</h1>
  

      
        <time datetime="2018-04-20T09:09:42.000Z">2018-04-20</time>
      
    </header>
    <div class="entry">
      
        <p>Spring的IoC容器支持两种配置文件格式：Properties文件格式和XML文件格式。其中XML格式的容器信息管理方式是Spring提供的最为强大、支持最为全面的方式。<br><a id="more"></a></p>
<h2 id="beans标签"><a href="#beans标签" class="headerlink" title="beans标签"></a>beans标签</h2><p>beans标签是XML配置文件中最顶层的元素，它下面可以包含0个或1个description标签和多个bean以及import或者alias标签。</p>
<h3 id="相关属性"><a href="#相关属性" class="headerlink" title="相关属性"></a>相关属性</h3><ul>
<li>default-lazy-init：可以指定为true或者false，默认值是false。用来标志是否对所有的bean进行延迟初始化。</li>
<li>default-autowire：可以取值为no、byName、byType、constructor以及autodetect。默认为no，如果使用自动绑定的话，用来标志全体bean使用哪一种默认绑定方式。</li>
<li>default-dependency-check：可以取值none、objects、simple以及all，默认值是none，即不做依赖检查。</li>
<li>default-init-method：如果所有的bean按照某种规则，都有同样名称的初始化方法的话，可以在这里统一指定这个初始化方法名，而不用在每一个bean上都重复指定。</li>
<li>default-destroy-method：与default-init-method属性相对应，如果所有的bean有按照某种规则使用了相同名称的对象销毁方法，可以通过这个属性统一指定。</li>
</ul>
<h2 id="bean标签"><a href="#bean标签" class="headerlink" title="bean标签"></a>bean标签</h2><ul>
<li>id属性：每个注册到容器的对象都需要一个唯一标识来进行区分。通过id属性来指定当前注册对象的beanName。如果bean标签不存在id属性还可以通过name属性（别名）来指定beanName。</li>
<li>class属性：每个注册到容器的对象都需要通过class属性指定其类型，即通过那个类构建。</li>
<li>depend-on属性：如果没有通过ref标签明确的指定对象A依赖对象B，如果还需要在对象A实例化之前实例化对象B，那么就可以在对象A中指定该属性。</li>
<li>autowire属性：指定自动绑定的模式，对应beans标签的default-autowire属性。</li>
<li>dependency-check属性：指定对其所依赖对象进行检查的级别，对应beans标签的default-dependency-check属性。</li>
<li>lazy-init属性：设置该bean懒加载，对应beans标签的default-lazy-init属性。</li>
<li>parent属性：设置该bean继承设置的bean。可以复用一下属性。</li>
<li>abstract属性：声明为true的时候，说明该bean不需要被实例化。</li>
</ul>
<h2 id="bean标签的内部标签"><a href="#bean标签的内部标签" class="headerlink" title="bean标签的内部标签"></a>bean标签的内部标签</h2><h3 id="构造方法注入-constructor-arg标签"><a href="#构造方法注入-constructor-arg标签" class="headerlink" title="构造方法注入 - constructor-arg标签"></a>构造方法注入 - constructor-arg标签</h3><ul>
<li>type属性：指定构造方法的参数类型。</li>
<li>index属性：当某个对象的构造方法同时传入多个类型相同的参数时，index可以指定对应参数的顺序。</li>
</ul>
<h3 id="setter方法注入-property标签"><a href="#setter方法注入-property标签" class="headerlink" title="setter方法注入 - property标签"></a>setter方法注入 - property标签</h3><ul>
<li>name属性：指定被注入的对象所对应的实例变量名称。之后通过value或ref属性或者内嵌的其他元素来指定具体的依赖对象的引用或者值。<b>如果只使用property标签进行依赖注入的话，需要保证被注入的对象提供了默认的构造方法。</b></li>
</ul>
<h3 id="property和constructor-arg标签中可用的配置项"><a href="#property和constructor-arg标签中可用的配置项" class="headerlink" title="property和constructor-arg标签中可用的配置项"></a>property和constructor-arg标签中可用的配置项</h3><ul>
<li>value标签：可用通过value为主体对象注入简单的数据类型，不但可用指定String类型的数据，还可以指定原始类型与其包装类等。<ul>
<li><b>具体通过PropertyEditor接口的实现类来将字符串转换成对应的类型。其中原生类型及其实现类和Spring自己定义的StringArrayPropertyEditor(String数组，默认逗号分隔)、ClassEditor(Class对象)、FileEditor(File对象)、LocaleEditor(Locale对象)和PatternEditor(Pattern对象)等可以自动进行转换。如果需要自己指定类型时需要使用BeanFactoryPostProcessor接口的CustomEditorConfigurer类来将自己实现的PropertyEditor接口的实现类告知容器。</b></li>
</ul>
</li>
<li>ref标签：用来引用容器中其他的对象实例。可以通过ref的local、parent和bean属性来指定引用对象的beanName是什么。<ul>
<li>local属性：只能指定与当前配置的对象在同一个配置文件的对象定义的名称。</li>
<li>parent属性：只能指定位于当前容器的父容器中定义的对象引用。</li>
<li>bean属性：都可以指定，所以一般直接使用bean来指定对象引用。</li>
</ul>
</li>
<li>idref标签：如果要为当前对象注入依赖的对象的名称，而不是引用可以使用该标签。</li>
<li>内部bean标签：如果我们所依赖的对象只有当前一个对象引用，可以使用内嵌的bean标签。</li>
<li>list标签：对应数组和java.util.List及其子类的依赖对象。</li>
<li>set标签：对应java.util.Set及其子类的依赖对象。</li>
<li>map标签：对应java.util.Map及其子类的依赖对象。</li>
<li>props标签：对应Properties的依赖对象。</li>
<li>null标签：对应null。而&lt;value&gt;&lt;/value&gt;对应的是空字符串。</li>
</ul>
<h2 id="工厂方法在XML文件中的配置"><a href="#工厂方法在XML文件中的配置" class="headerlink" title="工厂方法在XML文件中的配置"></a>工厂方法在XML文件中的配置</h2><p>可以使用实现FactoryBean接口或者使用@Bean注解替代。</p>
<h3 id="静态工厂方法"><a href="#静态工厂方法" class="headerlink" title="静态工厂方法"></a>静态工厂方法</h3><figure class="highlight"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">StaticFactoryMethod</span> </span>&#123;</span><br><span class="line">    <span class="function"><span class="keyword">public</span> <span class="keyword">static</span> IDemo <span class="title">getInstance</span><span class="params">(Test test)</span> </span>&#123;</span><br><span class="line">        <span class="keyword">return</span> <span class="keyword">new</span> Demo(test);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="comment">// 对应的XML配置</span></span><br><span class="line">&lt;bean id=<span class="string">"demo"</span> <span class="class"><span class="keyword">class</span></span>=<span class="string">"...StaticFactoryMethod"</span> factory-method=<span class="string">"getInstance"</span>&gt;</span><br><span class="line">    &lt;constructor-arg ref=<span class="string">"test"</span>/&gt;</span><br><span class="line">&lt;/bean&gt;</span><br></pre></td></tr></table></figure>
<h3 id="非静态工厂方法"><a href="#非静态工厂方法" class="headerlink" title="非静态工厂方法"></a>非静态工厂方法</h3><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">NonStaticFactoryMethod</span> </span>&#123;</span><br><span class="line">    <span class="function"><span class="keyword">public</span> IDemo <span class="title">getInstance</span><span class="params">()</span> </span>&#123;</span><br><span class="line">        <span class="keyword">return</span> <span class="keyword">new</span> Demo();</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="comment">// 对应的XML配置</span></span><br><span class="line">&lt;bean id=<span class="string">"factoryMethod"</span> <span class="class"><span class="keyword">class</span></span>=<span class="string">"...NonStaticFactoryMethod"</span>/&gt;</span><br><span class="line">&lt;bean id=<span class="string">"demo"</span> factory-bean=<span class="string">"factoryMethod"</span> factory-method=<span class="string">"getInstance"</span>/&gt;</span><br></pre></td></tr></table></figure>
      
    </div>
      
      <footer>
        
        
  
  <div class="tags">
    <a href="/tags/JavaWeb/">JavaWeb</a>
  </div>

        
  <div class="addthis addthis_toolbox addthis_default_style">
    
      <a class="addthis_button_facebook_like" fb:like:layout="button_count"></a>
    
    
      <a class="addthis_button_tweet"></a>
    
    
      <a class="addthis_button_google_plusone" g:plusone:size="medium"></a>
    
    
      <a class="addthis_button_pinterest_pinit" pi:pinit:layout="horizontal"></a>
    
    <a class="addthis_counter addthis_pill_style"></a>
  </div>
  <script type="text/javascript" src="//s7.addthis.com/js/300/addthis_widget.js"></script>

      
      <div class="clearfix"></div>
      </footer>
  </div>
</article>

<!-- 来必力City版安装代码 -->
<!-- <div id="lv-container" data-id="city" data-uid="MTAyMC8yOTQ5MS82MDU5">
<script type="text/javascript">
   (function(d, s) {
       var j, e = d.getElementsByTagName(s)[0];

       if (typeof LivereTower === 'function') { return; }

       j = d.createElement(s);
       j.src = 'https://cdn-city.livere.com/js/embed.dist.js';
       j.async = true;

       e.parentNode.insertBefore(j, e);
   })(document, 'script');
</script>
<noscript>为正常使用来必力评论功能请激活JavaScript</noscript>
</div> -->
<!-- City版安装代码已完成 -->

</div></div>
    <aside id="sidebar" class="alignright">
  
<div class="widget tagcloud">
  <h3 class="title">文章分类</h3>
  <div class="entry">
    <a href="/tags/JavaWeb/" style="font-size: 17.14px;">JavaWeb</a> <a href="/tags/Java基础/" style="font-size: 15.71px;">Java基础</a> <a href="/tags/Java高级特性/" style="font-size: 15.71px;">Java高级特性</a> <a href="/tags/Python/" style="font-size: 10px;">Python</a> <a href="/tags/Spring基础/" style="font-size: 14.29px;">Spring基础</a> <a href="/tags/WebRTC/" style="font-size: 10px;">WebRTC</a> <a href="/tags/其它/" style="font-size: 20px;">其它</a> <a href="/tags/分布式/" style="font-size: 11.43px;">分布式</a> <a href="/tags/硬件/" style="font-size: 12.86px;">硬件</a> <a href="/tags/计算机基础/" style="font-size: 18.57px;">计算机基础</a> <a href="/tags/设计模式/" style="font-size: 17.14px;">设计模式</a>
  </div>
</div>



    <div class="widget tagcloud">
    <h3 class="title">电子书</h3>
    <ul class="entry">
      <li class='link'><a href='http://www.duokan.com/' target="_blank">多看阅读</a>&nbsp;&nbsp;<a href='https://read.douban.com/' target="_blank">豆瓣阅读</a>&nbsp;&nbsp;<a href='http://e.dangdang.com/' target="_blank">当当阅读</a></li>
      <li class='link'><a href='http://www.ituring.com.cn/' target="_blank">图灵社区</a>&nbsp;&nbsp;<a href='https://www.epubit.com/' target="_blank">异步社区</a>&nbsp;&nbsp;<a href='https://www.geekbang.org/' target="_blank">极客空间</a></li>
    </ul>
  </div>


  
  <div class="widget tag">
    <h3 class="title">友情链接</h3>
      <ul class="entry">
        
          <li class='link'><a href='http://www.cnblogs.com/jietang/' target="_blank">唐洁的博客</a></li>
        
          <li class='link'><a href='http://rednaxelafx.iteye.com/' target="_blank">R大的博客</a></li>
        
          <li class='link'><a href='http://www.hollischuang.com/' target="_blank">阿里大神的博客</a></li>
        
          <li class='link'><a href='http://blog.csdn.net/IT_faquir/' target="_blank">IT_faquir的专栏</a></li>
        
      </ul>
  </div>


  
  <div class="widget tag">
    <h3 class="title">思维导图</h3>
      <ul class="entry">
        
          <li class='link'><a href='https://fengbo4213.github.io/img/开源协议.png' target="_blank">开源协议简介</a></li>
        
          <li class='link'><a href='https://www.processon.com/diagraming/5b0cf757e4b009aef58d4b9d' target="_blank">我的知识体系</a></li>
        
          <li class='link'><a href='https://www.processon.com/view/link/5a2a00e5e4b015e677290b4f' target="_blank">简单的网站架构</a></li>
        
      </ul>
  </div>


  
  <div class="widget tag">
    <h3 class="title">在线手册</h3>
      <ul class="entry">
        
          <li class='link'><a href='http://v3.bootcss.com/' target="_blank">BootStrap官方手册</a></li>
        
          <li class='link'><a href='http://www.iconfont.cn/http://element.eleme.io/#/zh-CN/' target="_blank">阿里巴巴矢量图标库</a></li>
        
      </ul>
  </div>


  
<div class="widget tag">
  <h3 class="title">最新文章</h3>
  <ul class="entry">
    
      <li>
        <a href="/2123/08/30/基础之MySQL原理/">MySQL原理</a>
      </li>
    
      <li>
        <a href="/2024/01/01/其它之ClickHouse索引/">ClickHouse索引</a>
      </li>
    
      <li>
        <a href="/2023/12/17/其它之MySQL线程池/">MySQL线程池</a>
      </li>
    
      <li>
        <a href="/2023/12/16/其它之InnoDB性能优化基础/">InnoDB性能优化基础</a>
      </li>
    
      <li>
        <a href="/2023/12/03/其它之Java8之后的版本新特性/">Java8之后的版本新特性</a>
      </li>
    
  </ul>
</div>

</aside>
    <div class="clearfix"></div>
  </div>
  <footer id="footer" class="inner"><div class="alignleft">
  
  &copy; 2024 fengbo
  
</div>
<div class="clearfix"></div></footer>
  <script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>



</body>
</html>

